home *** CD-ROM | disk | FTP | other *** search
/ Scene Storm / Scene Storm - Volume 1.iso / coding / c / amiexpress / source / ae / code / ax3.00 / newuser.c < prev    next >
Encoding:
C/C++ Source or Header  |  1980-01-03  |  10.6 KB  |  459 lines

  1. #include "bbs.h"
  2. extern int ValidUser;
  3.  
  4. int CheckifNameAllowed(char *name)
  5. {
  6.  char *s;
  7.  char **tooltypes;
  8.  struct DiskObject *dobj;
  9.  int num=1;
  10.  sprintf(GSTR1,"%sNamesNotAllowed",Cmds->BBSLoc);
  11.  if(dobj=GetDiskObject(GSTR1))
  12.  {
  13.     tooltypes=dobj->do_ToolTypes;
  14.     sprintf(GSTR1,"NAME.%d",num++);
  15.     while(s=FindToolType(tooltypes,GSTR1))
  16.     {
  17.       if(!stricmp(name,s))
  18.       {
  19.         FreeDiskObject(dobj);
  20.         AEPutStr("Username not allowed!!\r\n\r\n");
  21.         return(1);
  22.       }
  23.       sprintf(GSTR1,"NAME.%d",num++);
  24.     } 
  25.     FreeDiskObject(dobj);
  26.     } else {
  27.      sprintf(GSTR1,"ERROR! you are missing the %sNamesNotAllowed file\n",Cmds->BBSLoc);
  28.         CallersLog(GSTR1);
  29.         AEPutStr(GSTR1);
  30.         SendChar('\r');
  31.         sprintf(GSTR1,"No new users will be allowed to join!\n");
  32.         CallersLog(GSTR1);
  33.         AEPutStr(GSTR1);
  34.         SendChar('\r');
  35.         return(1);
  36.     }
  37.  return(0);
  38. }
  39.  
  40. static int IsStrDigits(char *s)
  41. {
  42.  int loop;
  43.  
  44.  for(loop=0; loop<strlen(s); loop++)    {
  45.         if(!(s[loop]>='0'&&s[loop]<='9')) {
  46.             AEPutStr("\r\nNumbers only please!\r\n\r\n");
  47.             return(0);
  48.         }
  49.     }
  50.  return(1);
  51. }
  52.  
  53. int NumberOfLinesTest(void)
  54. {
  55.  int stat;
  56.  char str[20];
  57.  
  58.  for(stat=70; stat>1; stat--) {
  59.      sprintf(str," %d\r\n",stat);
  60.         AEPutStr(str);
  61.     }
  62.  AEPutStr("\r\nEnter the number you see at the top of your screen: ");
  63.  stat=LineInput("",str,3,KEYBOARD_TIMEOUT);
  64.  if(stat<0)          return(stat);
  65.  if(str[0]=='\0')    return(1);
  66.  stat=IsStrDigits(str);
  67.  if(!stat)           return(0);
  68.  stat = (int)atol(str);
  69.  if(stat < 1 || stat > 255)  return(0);
  70.  User.LineLength=(UBYTE)stat;
  71.  return(1);
  72. }
  73.  
  74. int ChooseComputer(void)
  75. {
  76.  int stat;
  77.  
  78.  for(stat=0;stat<ComputerEntries;stat+=2) {
  79.      sprintf(GSTR1,"%2d> %-34s ",stat,ComputerTypes[stat]);
  80.         AEPutStr(GSTR1);
  81.      if((stat+1)<ComputerEntries) {
  82.          sprintf(GSTR1,"%2d> %-34s\r\n",stat+1,ComputerTypes[stat+1]);
  83.             AEPutStr(GSTR1);
  84.         }
  85.      else        AEPutStr("\r\n");
  86.     }
  87.  AEPutStr("\r\n");
  88.  
  89. JLoop5:
  90.  AEPutStr("Enter computer type: ");
  91.  stat=LineInput("",GSTR1,3,KEYBOARD_TIMEOUT);
  92.  if(stat<0)  return(stat);
  93.  if(strlen(GSTR1)==0)  return(1);
  94.  if(!(stat=IsStrDigits(GSTR1)))    goto JLoop5;
  95.  
  96.  User.Sec_Bulletin=(USHORT)atol(GSTR1);
  97.  if(User.Sec_Bulletin < 0 || User.Sec_Bulletin >= ComputerEntries)  goto JLoop5;
  98.  return(0);
  99. }
  100.  
  101. int JCom(void)
  102. {
  103.  int ch, stat;
  104.  char string[200];
  105.  struct User TUser;
  106.  struct UserKeys TUserkeys;
  107.  int i;
  108.  
  109.  if(User.Slot_Number>0)  return(FAILURE);
  110.  
  111.  Find_Open_Account(&User,&User_keys);
  112.  
  113.  
  114.  /* show as new user */
  115.  StatPrintUser(&User);
  116.  
  117.  AEPutStr("\r\n");
  118.  sprintf(GSTR1,"%sJoin",Sopt->NodeScreen);
  119.  if(!(stat=ChecktoDisplay(GSTR1,GSTR3,0,1)))
  120.      UnAvailNotice(GSTR3,GSTR1);
  121.  
  122. JLoop1:
  123.  AEPutStr("\r\n");
  124.  AEPutStr("Blank line to retreat\r\n");
  125.  
  126.  ch=0;
  127. IJLoop:
  128.                  // change to variable
  129.  for(i = 0; i < 5; i++) {
  130.      AEPutStr("\r\nEnter your Handle: ");
  131.                                          /*** MAKE KEYBOARD_TIMEOUT A VARIABLE */
  132.      stat=LineInput(User.Name,User.Name,30,KEYBOARD_TIMEOUT);
  133.      if(stat<0)  return(stat);
  134.  
  135.      if(strlen(User.Name)==0) {
  136.          ch++;
  137.             if(ch>5) {
  138.              AEPutStr("Too Many Errors, Goodbye!\r\n");
  139.                 return(FAILURE);
  140.             }
  141.          continue;
  142.        //  goto IJLoop;
  143.         }
  144.  
  145.      if(strlen(User.Name)==1) {
  146.          AEPutStr("Get REAL!!  One Character???\r\n");
  147.             // goto IJLoop;
  148.          continue;
  149.         }
  150.      strcpy(string,User.Name);
  151.  
  152.      if(stat=CheckifNameAllowed(string)) {
  153.          continue; // goto IJLoop;
  154.      }
  155.  
  156.      strcpy(string,User.Name);
  157.  
  158.      AEPutStr("\r\nChecking for duplicate name...");
  159.      stat=CheckForAst(string);
  160.  
  161.      if(stat) {
  162.          AEPutStr("No wildcards allow in a name.\r\n");
  163.             continue;  // goto IJLoop;
  164.         }
  165.  
  166.      stat=Find_User_From_Name(1,string,&TUser,&TUserkeys);
  167.      if(stat!=0)    {
  168.          AEPutStr("Already in use!, try another.\r\n");
  169.             continue;              // goto IJLoop;
  170.         }
  171.      AEPutStr("Ok!\r\n\r\n");
  172.     goto JLoop2;
  173.  }
  174.  
  175.  AEPutStr("Too Many Errors, Goodbye!\r\n");
  176.  return(FAILURE);
  177.  
  178. //--- end new loop1
  179.  
  180.  
  181.  
  182. JLoop2:
  183.  AEPutStr("City, State: ");
  184.  stat=LineInput("",User.Location,29,KEYBOARD_TIMEOUT);
  185.  if(stat<0)  return(stat);
  186.  if(strlen(User.Location)==0)  goto IJLoop;
  187.  
  188. JLoop3:        AEPutStr("Phone Number: ");
  189.         stat=LineInput("",User.PhoneNumber,12,KEYBOARD_TIMEOUT);
  190.         if(stat<0) return(stat);
  191.         if(strlen(User.PhoneNumber)==0)  goto JLoop2;
  192.  
  193. JLoop4:        AEPutStr("Enter a PassWord: ");
  194.         stat=LineInput("",GSTR1,32,KEYBOARD_TIMEOUT);
  195.         if(stat<0) return(stat);
  196.         if(strlen(GSTR1)==0)  goto JLoop3;
  197.         strupr(GSTR1);                // make uppercase!
  198.         AECryptCpy(User.PassKey,GSTR1);        // save encryped pass
  199.  
  200. JLoop41:
  201.  stat=NumberOfLinesTest();
  202.  if(stat<0)  return(stat);
  203.  if(stat==0)  goto JLoop4;
  204.  
  205.     AEPutStr("\r\n");
  206.  
  207.     if(stat=ChooseComputer())
  208.         {
  209.         if(stat<0) return(stat);
  210.         goto JLoop41;
  211.         }
  212.  
  213.     AEPutStr("\r\n");
  214.  
  215.  /* (RTS) added */
  216.  User_keys.baud_rate = Online_Baud;
  217.  User_keys.Userflags = 0;
  218.  User_keys.Userflags = (UWORD) (USER_NEWMSG);
  219.  AEPutStr("You want Screen Clears after Messages ? ");
  220.  ch=Check_Online_Status();
  221.  if(ch<0) return(ch);
  222.     ch=ReadChar(KEYBOARD_TIMEOUT);
  223.     if(ch<0)  return(ch);
  224.     if(ch=='Y' || ch=='y') {
  225.        User_keys.Userflags |= USER_SCRNCLR;         /* screen clear code sent */
  226.        AEPutStr("Yes..\r\n\r\n");
  227.     }
  228.  else  AEPutStr("No!\r\n\r\n");
  229. //(RTS) was Full Name
  230.  sprintf(string,"Handle: %s\r\n",User.Name);
  231.  AEPutStr(string);
  232.  sprintf(string,"City, St.: %s\r\n",User.Location);
  233.  AEPutStr(string);
  234.  sprintf(string,"Phone Num: %s\r\n",User.PhoneNumber);
  235.  AEPutStr(string);
  236.  sprintf(string,"Num Lines: %d\r\n",User.LineLength);
  237.  AEPutStr(string);
  238.  AEPutStr("PassWord : ENCRYPTED\r\n");
  239.  sprintf(string,"Computer : %s\r\n",ComputerTypes[User.Sec_Bulletin]);
  240.  AEPutStr(string);
  241.  AEPutStr("Scrn Clr : ");
  242.  if(User_keys.Userflags & USER_SCRNCLR)    AEPutStr("YES\r\n");
  243.  else                                      AEPutStr("NO\r\n");
  244.  AEPutStr("\r\n");
  245.  PurgeLine();
  246.  AEPutStr("Is the above Correct? ");
  247.  
  248.  FOREVER    {
  249.      ch=Check_Online_Status();
  250.      if(ch<0) return(ch);
  251.         ch=ReadChar(KEYBOARD_TIMEOUT);
  252.         if(ch<0)  return(ch);
  253.         if(ch=='N' || ch=='n' || ch=='Q' || ch=='q') {
  254.          AEPutStr("No!\r\n\r\n");
  255.             goto JLoop1;
  256.         }
  257.         if(ch=='Y' || ch=='y')  break;
  258.         else  continue;
  259.     }
  260.  AEPutStr("Yes..\r\n\r\n");
  261.  InitUser(&User,&User_keys);
  262. BytesADL = User.Daily_Bytes_Limit;
  263. ConvertAccess();
  264.  
  265.  User_keys.Number=User.Slot_Number;
  266.  
  267. //(RTS)
  268.  User_keys.baud_rate = Online_Baud;    /* hold last logged on baud rate */
  269.  ValidUser=0;                          /* not a valid user yet */
  270.  
  271.  StatPrintUser(&User);
  272.  
  273.  PurgeLine();
  274.  
  275.  stat=Question();    /* fill out questioneer */
  276.  if(stat < (-1))    return(stat);
  277.  
  278. //(RTS) dont save account until after questioneer is filled out
  279.  ValidUser=1;                          /* ok script done */
  280.  Save_Account(&User,&User_keys,0,0);
  281.  StatPrintUser(&User);
  282.  ClearMsgPointers();
  283.  MasterSavePointers();
  284.  sprintf(GSTR1,"%sJoined",Sopt->NodeScreen);
  285.  if(!(stat=ChecktoDisplay(GSTR1,GSTR3,0,1)))
  286.      UnAvailNotice(GSTR3,GSTR1);
  287.  
  288.  ch=DoPause();
  289.  if(ch<0) return(ch);
  290.  return(SUCCESS);
  291. }
  292.  
  293. void InitUser(struct User *u,struct UserKeys *k)
  294. {
  295.      sprintf(GSTR1,"%sACCESS/Preset.1",Cmds->BBSLoc);
  296.     GetFromIconStr(GSTR1,"PRESET.AREA",u->Conference_Access);
  297.  
  298.     /* fill in default 'user.data' */
  299.  
  300.     u->Sec_Status        = IntFromIcon(GSTR1,"PRESET.ACCESS");
  301.     u->Sec_Board        = IntFromIcon(GSTR1,"PRESET.RATIO_TYPE");
  302.     u->Sec_Library        = IntFromIcon(GSTR1,"PRESET.RATIO");
  303.     u->Time_Limit        = IntFromIcon(GSTR1,"PRESET.TIME_LIMIT");
  304.     u->ConfRJoin        = IntFromIcon(GSTR1,"PRESET.CONFRJOIN");
  305.     u->Daily_Bytes_Limit    = IntFromIcon(GSTR1,"PRESET.DAILY_BYTE_LIMIT");
  306.     u->Time_Total        = u->Time_Limit;
  307.     u->Time_Used        = 0L;
  308.     u->New_User        = 1;
  309.     u->Messages_Posted    = 0;
  310.     u->NewSinceDate        = 0;
  311.     u->Uploads        = 0;
  312.     u->Downloads        = 0;
  313.     u->Times_Called        = 0;
  314.     u->Bytes_Download    = 0L;
  315.     u->Bytes_Upload        = 1L;
  316.      u->Daily_Bytes_Dld    = 0L;
  317.     u->ConfYM1        = 0L;
  318.     u->ConfYM2        = 0L;
  319.     u->ConfYM3        = 0L;
  320.     u->ConfYM4        = 0L;
  321.     u->ConfYM5        = 0L;
  322.     u->ConfYM6        = 0L;
  323.     u->ConfYM7        = 0L;
  324.     u->ConfYM8        = 0L;
  325.     u->ConfYM9        = 0L; 
  326.     u->ConfRead2        = 0L;
  327.     u->ConfRead3        = 0L;
  328.     u->ConfRead4        = 0L;
  329.     u->ConfRead5        = 0L;
  330.     u->XferProtocol        = 0;
  331.     u->Lcfiles        = 0;
  332.     u->BadFiles        = 0;
  333.     u->Filler2        = 0;
  334.     u->ScreenType        = 0;
  335.     u->Expert         = 'N';
  336.     u->AccountDate        = time(NULL);
  337.     strcpy(u->PassKey,"");
  338.  
  339.     if(u->ConfRJoin==NULL) u->ConfRJoin=1;
  340.  
  341.     /* fill in default 'user.keys' */
  342.  
  343.     strcpy(k->UserName,u->Name);
  344.     strupr(k->UserName);
  345.     k->Number        = u->Slot_Number;
  346.     k->DNcps        = 0;
  347.     k->UPcps        = 0;
  348.     k->baud_rate        = 0L;    /* hold last logged on baud rate */
  349.  
  350.  
  351. }
  352.  
  353. static int Questionaire(char *filename,char *Afilename)
  354. {
  355.  int ch,stat;
  356.  char c[200],string[200],date[20],Dtime[30];
  357.  char *p;
  358.  FILE *fp2,*fp1;
  359.  
  360. QAgain:
  361.  
  362.  sprintf(string,"%sNode%u/TempAns",Cmds->BBSLoc,Cmds->AcLvl[LVL_NODE_NUMBER]);
  363.  
  364.  if(!(fp1=fopen(string,"w"))) {
  365.      return(GOODBYE);
  366.  }
  367.  
  368.  time(&Time_system);
  369.  
  370.  strcpy(c,ctime(&Time_system));
  371.  c[strlen(c)-1]='\0';
  372.  
  373.  Convert_CTime_To_Date(c,date,Dtime);
  374.  
  375.  fprintf(fp1,"**************************************************************\n");
  376.  fprintf(fp1,"%s (%s) [%hu] %s (%s) %s\n",date,Dtime,User.Slot_Number,User.Name,ConnectString,User.Location);
  377.  
  378.  fclose(fp1);
  379.  sprintf(GSTR1,"%sCommands/SysCmd/",Cmds->BBSLoc);
  380.  strcpy(GSTR2,"SCRIPT");
  381.  if(!CustomCommand(GSTR1,GSTR2,1))
  382.  {
  383.     fp2=fopen(filename,"r");
  384.     if(fp2==NULL) return(SUCCESS);
  385.     if(!(fp1=fopen(string,"a"))) return(GOODBYE);
  386.  
  387. // read & verify Questionaire
  388.  while(fgets(c,120,fp2)!=NULL)    {
  389.      if(c[strlen(c)-2]!='~')    {
  390.          AEPutStr(c);
  391.             AEPutStr("\r");
  392.             fprintf(fp1,"%s",c);
  393.         } else {
  394.          c[strlen(c)-2]='\0';
  395.             AEPutStr(c);
  396.          fputs(c,fp1);
  397.             stat=LineInput("",string,70,KEYBOARD_TIMEOUT);
  398.             if(stat<0) {
  399.              fclose(fp1);
  400.                 fclose(fp2);
  401.                  return(stat);            //(RTS)
  402. //                return(0);
  403.             }
  404.          fprintf(fp1,"%s\n",string);
  405.         }
  406.     }
  407.  
  408.  fclose(fp1);
  409.  fclose(fp2);
  410.  }
  411.  
  412.  AEPutStr("\r\n");
  413.  
  414.  AEPutStr("Is the above Correct? ");
  415.  
  416.  FOREVER    {
  417.      ch=Check_Online_Status();
  418.         if(ch<0) return(ch);
  419.      ch=ReadChar(KEYBOARD_TIMEOUT);
  420.         if(ch<0)  return(ch);
  421.      if(ch=='N' || ch=='n' || ch=='Q' || ch=='q') {
  422.          AEPutStr("No!\r\n\r\n");
  423.             goto QAgain;
  424.         }
  425.      if(ch=='Y' || ch=='y')  break;
  426.         else  continue;
  427.     }
  428.  AEPutStr("Yes..\r\n\r\n");
  429.  
  430.  if(!(fp1=fopen(Afilename,"r")))
  431.        fp1=fopen(Afilename,"w");
  432.  else {
  433.      fclose(fp1);
  434.         fp1=fopen(Afilename,"a");
  435.     }
  436.  
  437.  sprintf(string,"%sNode%u/TempAns",Cmds->BBSLoc,Cmds->AcLvl[LVL_NODE_NUMBER]);
  438.  if((fp2=fopen(string,"r"))) {
  439.      for(;;)    {
  440.          if(!(p=fgets(c,120,fp2)))             break;
  441.          fputs(c,fp1);
  442.         }
  443.         fclose(fp1);
  444.         fclose(fp2);
  445.     }
  446.  return(SUCCESS);
  447. }
  448.  
  449. int Question(void)
  450. {
  451.  char str1[200], str2[200];
  452.  
  453.  sprintf(str1,"%sNode%u/Script%d",Cmds->BBSLoc,Cmds->AcLvl[LVL_NODE_NUMBER],Online_Baud);
  454.  sprintf(str2,"%sNode%u/Answers",Cmds->BBSLoc,Cmds->AcLvl[LVL_NODE_NUMBER]);
  455.  
  456.  return(Questionaire(str1,str2));
  457. }
  458.  
  459.